En el análisis de datos, uno de los retos más frecuentes es enfrentarse a conjuntos de información con un número elevado de variables, lo que se conoce como alta dimensionalidad. Este fenómeno puede dificultar la interpretación de los datos, aumentar la complejidad computacional y, en ocasiones, generar redundancia o ruido que limita la capacidad de los modelos de aprendizaje automático para identificar patrones relevantes. Para enfrentar esta problemática, se emplean técnicas de reducción de dimensiones, cuyo objetivo principal es transformar los datos a un espacio de menor número de variables preservando, en la medida de lo posible, la estructura y la información más importante.
La reducción de dimensiones resulta útil en múltiples contextos: facilita la visualización de datos complejos en dos o tres dimensiones, mejora la eficiencia de los algoritmos de aprendizaje automático y ayuda a eliminar redundancias entre variables correlacionadas. Además, permite descubrir relaciones ocultas que podrían no ser evidentes en un espacio de alta dimensionalidad.
Existen diversos enfoques para llevar a cabo este proceso. Entre ellos, se destacan tres métodos ampliamente utilizados:
Análisis de Componentes Principales (PCA, por sus siglas en inglés): es una técnica lineal que transforma el conjunto original de variables en un nuevo sistema de coordenadas, donde las nuevas variables —llamadas componentes principales— capturan la mayor parte de la variabilidad de los datos con un número reducido de dimensiones.
t-Distributed Stochastic Neighbor Embedding (t-SNE): es un método no lineal orientado principalmente a la visualización de datos de alta dimensionalidad. Su fortaleza radica en preservar las relaciones locales entre puntos, es decir, que objetos similares en el espacio original permanezcan cercanos en el espacio reducido.
Uniform Manifold Approximation and Projection (UMAP): al igual que t-SNE, es una técnica no lineal que busca representar los datos en pocas dimensiones manteniendo tanto la estructura local como la global. UMAP destaca por su eficiencia computacional y por ofrecer representaciones más estables y escalables en comparación con t-SNE.
En este trabajo se aplicarán y compararán estos tres métodos con el fin de explorar su utilidad en la representación y análisis de datos multidimensionales, destacando sus ventajas, limitaciones y diferencias en cuanto a resultados.
La base “loan_approval_dataset” es un conjunto de datos financieros y de otro tipo, utilizada para determinar la elegibilidad de individuos u organizaciones para obtener créditos de una institución financiera. Se puede obtener de www.kaggle.com.
Está compuesta por 12 variables y 4269 registros. Nueve variables son numéricas y tres categóricas. La variable loan_status es una variable de respuesta que indica si al individuo le fue aprobado (approved) o negado (rejected) el préstamo.
## Rows: 4,269
## Columns: 12
## $ no_of_dependents <dbl> 2, 0, 3, 3, 5, 0, 5, 2, 0, 5, 4, 2, 3, 2, 1, …
## $ education <chr> "Graduate", "Not Graduate", "Graduate", "Grad…
## $ self_employed <chr> "No", "Yes", "No", "No", "Yes", "Yes", "No", …
## $ income_annum <dbl> 9600000, 4100000, 9100000, 8200000, 9800000, …
## $ loan_amount <dbl> 29900000, 12200000, 29700000, 30700000, 24200…
## $ loan_term <dbl> 12, 8, 20, 8, 20, 10, 4, 20, 20, 10, 2, 18, 1…
## $ cibil_score <dbl> 778, 417, 506, 467, 382, 319, 678, 382, 782, …
## $ residential_assets_value <dbl> 2400000, 2700000, 7100000, 18200000, 12400000…
## $ commercial_assets_value <dbl> 17600000, 2200000, 4500000, 3300000, 8200000,…
## $ luxury_assets_value <dbl> 22700000, 8800000, 33300000, 23300000, 294000…
## $ bank_asset_value <dbl> 8000000, 3300000, 12800000, 7900000, 5000000,…
## $ loan_status <chr> "Approved", "Rejected", "Rejected", "Rejected…
La base está muy limpia pues no presenta datos ausentes, tal como demuestra el análisis con visdat.
Análisis de datos ausentes
La exploración de las variables no muestra problemas relevante. Tres variables tienen outliers, pero representan una proporción pequeña de las observaciones.
## # A tibble: 9 × 10
## variables min Q1 mean median Q3 max zero minus outlier
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <int> <int>
## 1 no_of_dependents 0 1 e0 2.50e0 3 e0 4 e0 5 e0 712 0 0
## 2 income_annum 2e5 2.70e6 5.06e6 5.10e6 7.5 e6 9.9 e6 0 0 0
## 3 loan_amount 3e5 7.70e6 1.51e7 1.45e7 2.15e7 3.95e7 0 0 0
## 4 loan_term 2e0 6 e0 1.09e1 1 e1 1.6 e1 2 e1 0 0 0
## 5 cibil_score 3e2 4.53e2 6.00e2 6 e2 7.48e2 9 e2 0 0 0
## 6 residential_asse… -1e5 2.20e6 7.47e6 5.6 e6 1.13e7 2.91e7 45 28 52
## 7 commercial_asset… 0 1.3 e6 4.97e6 3.7 e6 7.6 e6 1.94e7 107 0 37
## 8 luxury_assets_va… 3e5 7.5 e6 1.51e7 1.46e7 2.17e7 3.92e7 0 0 0
## 9 bank_asset_value 0 2.3 e6 4.98e6 4.6 e6 7.1 e6 1.47e7 8 0 5
Elaboramos histogramas de las variables para observar su distribución.
Histogramas de las variables numéricas
El análisis exploratorio no muestra problemas con las variables para ser procesadas en métodos de reducción de dimensiones.
El objetivo de este trabajo es el de aplicar los tres métodos de reducción de dimensiones revisados en clase: análisis de componentes principales (PCA), aproximación y proyección de variedad uniforme (UMAP) y incrustación de vecinos estocásticos distribuidos en t (t-SNE) a la base de datos asignada por el profesor. Interpretaremos y compararemos entre sí los resultados de los tres métodos.
En esta sección aplicaremos el modelo PCA a la base de datos asignada. Para ello se recodificarán las variables categóricas education y self_employement como numéricas, asignando valores de 0 y 1. Por su parte, la variable respuesta se codificará como factor.
Se hará una exploración de la correlación de las variables para asegurarnos que la base es adecuada para el método PCA.
Matriz de correlaciones
La matriz de correlaciones muestra que cinco variables presentan correlaciones de medias a altas, mientras que otras cinco muestran correlaciones muy bajas. Para verificar que la base es apta para PCA calculamos el determinante de la matriz y el estadístico de Barttlet. Ambos indican que la base es apropiada para el método.
det(cor1_data)
## [1] 0.0009625711
psych::cortest.bartlett(cor1_data,n=dim(df)[1])
## $chisq
## [1] 656.3878
##
## $p.value
## [1] 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007274568
##
## $df
## [1] 55
El PCA muestra que el primer componente explica 40.8% de la varianza, mientras que los siguientes 5 rondan el 9% cada uno, de tal manera que para superar 80% de la varianza explicada, se deberían incluir 6 de los 11 componentes.
## # A tibble: 11 × 4
## PC std.dev percent cumulative
## <dbl> <dbl> <dbl> <dbl>
## 1 1 2.12 0.408 0.408
## 2 2 1.02 0.0938 0.502
## 3 3 1.01 0.0927 0.595
## 4 4 0.997 0.0904 0.685
## 5 5 0.990 0.0890 0.774
## 6 6 0.988 0.0887 0.863
## 7 7 0.765 0.0531 0.916
## 8 8 0.712 0.0461 0.962
## 9 9 0.486 0.0215 0.984
## 10 10 0.373 0.0126 0.996
## 11 11 0.205 0.00382 1
Gráfica de codo
Gráfico de varianza acumulada
Al graficar los dos primeros componentes no es posible obervar ningún patrón de agrupamiento, ni aún agrenado la variable de respuesta.
La gráfica de boxplot del primer componente muestra que los grupos basados en la variable de respuesta se distribuyen de forma muy parecida.
Boxplot del primer componente
En el boxplot del segundo componente se ve algo más de diferencia entre los grupos, pero recordemos que este segundo componente apenas explica el 9% de la varianza.
Boxplot del segundo componente
En el primer componente se observa una fuerte contribución de variables que tienen que ver con la magnitud de los activos del solicitante de crédito, su ingreso y el monto solicitado.
lads_pca %>%
filter(component %in% paste0("PC", 1:6)) %>%
mutate(component = fct_inorder(component)) %>%
ggplot(aes(value, terms, fill = terms)) +
geom_col(show.legend = FALSE) +
facet_wrap(~component, nrow = 1) +
labs(y = NULL)
El gráfico de ggpairs muestra que ningún componente, del 1 al 6, permite separar claramente los individuos por la variable de respuesta.
Gráficas ggpairs
El gráfico biplot muestra la magnitud de la contribución de cada variable en los dos primeros componentes. Nuevamente se observa que las variables relacionadas con el valor de los activos, el ingreso y el monto del crédito contribuyen de manera imporante al primer componente.
Biplot, componentes 1 y 2
Tampoco un gráfico de elipse muestra una buena separación por la variable de respuesta.
Diagrama de elipses
Finalmente, el gráfico biplot con los individuos no permite identificar una separación por la variable respuesta.
Solo el primer componente explica un porcentaje de varianza considerable (40%), los siguientes 5 componentes explican apenas alrededor de 9% de la varianza, de tal manera que se requieren 6 componentes para explicar una proporción mayor al 80%. PCA permite reducir de 11 a 6 el número de componentes, podría ser útil para un número considerable de sujetos, pues reduciría la demanda de computación. Sin embargo, PCA no demostró ser útil para separar a los individuos por la variable respuesta..
El algoritmo t-Distributed Stochastic Neighbor Embedding (t-SNE) es una técnica de reducción de dimensionalidad no lineal, que ayuda a representar datos de alta dimensión en un espacio de baja dimensión —usualmente dos o tres dimensiones— de manera que sea posible visualizarlos y detectar patrones. A diferencia de otros métodos lineales como el Análisis de Componentes Principales (PCA), t-SNE preserva la relación de cercanía entre las observaciones: puntos que son similares en el espacio original tienden a aparecer cercanos en el plano reducido, mientras que los puntos diferentes se alejan.
Al aplicar este algoritmo a nuestra base de datos, se facilita la detección de perfiles de solicitantes con características similares. De esta forma, se pueden explorar las diferencias entre clientes con préstamos abrobados y rechazados y se podría ayudar a comprender la estructura que dicta las decisiones de aprobación.
#Visualización
ggplot(datos, aes(x = Rtsne1, y = Rtsne2, color = loan_status)) +
geom_point(size = 1.5) +
labs(title = "Loan Approval Dataset - tSNE (perplexity=30, eta=200)") +
theme_minimal()
En la gráfica se observan agrupaciones visibles de solicitudes de préstamo, aunque no están completamente separadas. Hay zonas donde predominan los aprobados, por ejemplo en la parte central e izquierda, y otras donde predominan los rechazados, como en la parte superior y derecha. Sin embargo, también existe una mezcla considerable, lo que refleja que hay clientes con perfiles numéricamente similares pero con resultados distintos en la decisión del préstamo. Esto indica que el algoritmo t-SNE no actúa como un clasificador, pero muestra la estructura de los datos y muestra que las decisiones de aprobación sí se reflejan en las variables numéricas consideradas, aunque no de manera perfecta.
A continuacion se construye una cuadrícula de combinaciones de parámetros para el algoritmo t-SNE, en particular los valores de perplexity y eta (tasa de aprendizaje). Con la función expand.grid se generan todas las posibles combinaciones entre perplexity = 10, 20, 30, 40 y eta = 50, 100, 200, lo que permite ejecutar el modelo varias veces con diferentes configuraciones. De esta manera se pueden comparar los resultados y observar cómo la variación de estos hiperparámetros influye en la organización de los datos en el plano reducido.
ggplot(d_all, aes(x = Rtsne1, y = Rtsne2, color = loan_status)) +
geom_scattermore(pointsize = 2) +
facet_wrap(eta ~ perplexity, labeller = label_both) +
theme_bw() +
labs(title = "Exploración de parámetros en Loan Approval Dataset")
Se observa para valores bajos de preplexity que los puntos se ven m’as dispersos, las agrupaciones son difusas y no existe una estructura porque se mezclan muchos aprobas y rechazados.
Al aumentar al valor de perplexity a 30 , aparece una separaci’on m’as definida, aunque todav’ia existe superposici’on de algunos datos.
Si todav’ia se aumenta m’as el valor se generan formas alargadas, ademas de que las clases siguen mezcladas.
El hecho de que no se vea clara una separacion bien definida entre aprobados/rechazados significa que no se pueden distinguir solamente con las variables numericas.
Aunque si es notable como con parametros intermedios de perplexity y eta aparecen grupos mas organizados, lo que sugiere que si hay perfiles de clientes que tienden mas hacia la aprobacion o el rechazo.
Se asume entonces que aune t-SNE puede ayudar a darse una idea de que si hay patrones latentes, no logra separarlos. Par esto podrian ser mas utiles modeloos no supercisados de clasificacion para poder realmente predecir si el prestamo sera aprobado a rechazado.
# 6. Visualización
ggplot(datos, aes(x = Rtsne1, y = Rtsne2, color = loan_status)) +
geom_point(size = 1.5) +
labs(title = "Loan Approval Dataset - tSNE con variables categóricas incluidas, (perplexity=30, eta=200)") +
theme_minimal()
La inclusión de las variables categóricas permite que el algoritmo tenga más información para organizar los puntos, y eso se refleja en la aparición de grupos más claros (“Petalos”). Estos clústeres corresponden a perfiles de solicitantes que comparten características similares (ejemplo: nivel educativo, condición de autoempleo, ingresos, activos). Aun así, dentro de cada clúster hay mezcla de puntos rojos y azules, lo cual indica que los perfiles de los clientes utilizando las variables categoricas como education y self_employed no son utiles para realizar la agrupaci’on de los datos.
De igual forma se exploran mas combinaciones de valores para perplexity y eta:
Explorando los resultados, dentro de cada clúster aun hay mezcla de puntos rojos y azules. Se puede concluir que los perfiles de los clientes con la informacion que se encuentra en la base de datos no garantizan por sí solos la aprobación o rechazo: hay individuos con características similares pero con decisiones diferentes. Esto refleja que la decisión final del préstamo es multifactorial y puede incluir criterios adicionales que no e incluyen en la base de datos.
A continuación, implementaremos t-SNE en 3 dimensiones, para explorar estructuras que en tsne-2D no se logren apreciar
Comenzamos nuestra visualización incluyendo las variables categoricas en el modelo, con parametros fijos de perplexity=30, eta=200.
De la grafica anterior notamos que lo que habiamos llamado “petalos” en el caso 2D, toman forma de “gusanos” en el caso 3D, lo que nos permite una mejor visualización de los datos
A continuación variaremos los parametros (perplexity, eta), para explorar aún más nuestros datos
Y graficaremos de manera interactiva t-sne, para los distintos valores de los parametros (perplexity, eta). Esta gráfica se puede observar en el rmd.
De las graficas anteriores observamos una mejor separación en grupos para los parametros (perplexity=40, eta=100),
Ahora implementamos T-sne 3D, pero utilizando unicamente las variables numericas, con valores fijos de parametros (perplexity=30, eta= 200)
Podemos apreciar de una mejor manera como se agrupan los datos, y porque parecen superponerse al verse unicamente en 2 dimensiones. Notamos que los datos “aprobados” parecen envolver a los “rechazados”
Jugamos nuevamente con los parametros (perplexity, eta), para obtener distintas visualizaciones.
Graficamos los diferentes resultados del modelo t-sne, para los distintos valores de los parametros, en esta grafica interactiva
Notamos una evidente separación por la mitad, para parametros (perplexity=10, eta=100), aunque con algunos puntos “fuera” de su grupo.
Podemos concluir que el método t-sne es una buena herramienta para visualizar datos de alta dimensionalidad en baja dimensionalidad, sin embargo es evidente que t-sne 3D brinda una mejor visualización que t-sne 2D, ya que nos permite detectar las estructuras escondidas de los datos proyectados en un plano.
A partir de los resultados obtenidos con el modelo bidimensional, se procedió a implementar una variante de tres dimensiones con el fin de evaluar si, en cortes adicionales entre los componentes, UMAP lograba una mejor diferenciación de la variable respuesta. Para este ejercicio, se excluyó la variable income_annum, dado que mostraba una correlación predominante con la aprobación del crédito.
Para el ajuste de hiperparámetros se utilizó una búsqueda en malla, en la cual se incrementaron los valores de n_neighbors y, de manera paralela, los de min_dist, en comparación con los parámetros estándar definidos por UMAP. La distancia utilizada fue “euclidean”.
n_neighbors = c(15, 20, 30) min_dist = c(0.05, 0.075, 0.1)
Se generaron las proyecciones de los componentes UMAP1 vs. UMAP2 para cada combinación de parámetros evaluada. Los resultados obtenidos muestran patrones visuales muy similares a los observados en el modelo base, sin evidenciar mejoras significativas en la separación de la variable respuesta.
Se analizaron las proyecciones de los componentes UMAP1 vs. UMAP3 para cada combinación de parámetros. En este caso, se observó una mayor separación en la variable respuesta al utilizar distancias más amplias (min_dist = 0.1) junto con vecindarios ligeramente mayores (n_neighbors = 20–30).
Se analizaron las proyecciones de los componentes UMAP2 vs. UMAP3 para cada combinación de parámetros. En este caso, se observó una mayor separación en la variable respuesta al utilizar distancias más amplias (min_dist = 0.1) junto con vecindarios ligeramente mayores (n_neighbors = 20–30).
Al incrementar la dimensionalidad a tres componentes, se observó una mejor separación de la variable respuesta. Este resultado sugiere que la estructura de los datos presenta una mayor complejidad, la cual no puede ser representada de manera adecuada en un espacio bidimensional.
Finalmente, con el propósito de comprender con mayor profundidad la estructura revelada por UMAP, se calcularon las diez principales correlaciones entre las variables originales y los tres componentes obtenidos, considerando el caso con min_dist = 0.1 y n_neighbors = 30. Como se aprecia en la tabla, algunos features presentan correlaciones destacadas con los componentes 2 y 3, lo que aporta evidencia adicional sobre la complejidad de la estructura latente en los datos.
## # A tibble: 10 × 4
## # Groups: component [3]
## term component correlation[,1] abs_correlation[,1]
## <chr> <chr> <dbl> <dbl>
## 1 loan_amount UMAP1 -0.904 0.904
## 2 luxury_assets_value UMAP1 -0.900 0.900
## 3 bank_asset_value UMAP1 -0.838 0.838
## 4 loan_term UMAP3 -0.756 0.756
## 5 residential_assets_value UMAP1 -0.735 0.735
## 6 commercial_assets_value UMAP1 -0.723 0.723
## 7 cibil_score UMAP2 0.692 0.692
## 8 no_of_dependents UMAP3 0.446 0.446
## 9 commercial_assets_value UMAP2 0.397 0.397
## 10 loan_term UMAP2 -0.373 0.373
En el caso del modelo UMAP en tres dimensiones, no se identificó correlación significativa entre los componentes, lo que permite concluir que cada uno de ellos captura distintos aspectos de la estructura global de los datos.
En conclusión, la implementación de UMAP permitió explorar la estructura latente de los datos y visualizar la variable respuesta en un espacio de menor dimensión. El uso de tres dimensiones resultó más adecuado, ya que mejoró la separación de la aprobación del crédito, especialmente en las proyecciones de los componentes 1 vs. 3 y 2 vs. 3. Además, se identificaron features que únicamente se correlacionan con el tercer componente, aportando nueva información al análisis. Finalmente, la matriz de covarianza entre las tres dimensiones se mantuvo cercana a cero, lo que sugiere que los componentes extraídos son prácticamente ortogonales y capturan información complementaria.
La aplicación de los tres modelos logró una reducción de la dimensionalidad media, al requerirse al menos 6 de los 11 componentes inciales para explicar más del 80% de la viariabilidad. Por su parte, ninguno de los métodos permite una buena separación de los datos por la variable respuesta. Parece ser que en la determinación de aprobar o rechazar la solicitud de crédito se toman en cuenta variables que no están en la base de datos o, bien, la resolución final tiene un alto contenido de subjetividad de quien aprueba.
El proyecto nos permitió ensayar los métodos de reducción de dimensiones, las características de la base de datos nos llevó a buscar otras alternativas para separar los valores con base en la variable respuesta.